<?php
class System_Plugin_Action_CollectResource extends System_Plugin_Action_Default {

	/**
	 * eindeutige Identifikation der Aktion, wird in der Datenbank als hid abgespeichert
	 * @var string $_hid
	 */
	protected $_hid = 'CollectResource';

	/**
	 * Konstruktor der Klasse System_Plugin_Action_CollectResource
	 * @param none
	 * @return none;
	 */
	public function __construct() {

		// Aktionsdaten vorbereiten
		$this->_prepareActionData();
	}

	/**
	 * Initiale Methode, wenn die Action der Queue hinzugefuegt wird
	 * @param int $resourceId Id der Resource, die gesammelt werden soll
	 * @return object Instanz auf die Klasse System_Plugin_Action_CollectResource
	 */
	public function onInit($resourceId) {

		if(empty($resourceId)) {
			throw new Exception('beim Initialisieren der Action CollectResources muss eine Zielresource angegeben werden', 0);
			return false;
		}

		// Event setzen
		$this->_setEventCode(System_Plugin_Action_Default::EVENT_ON_INIT);

		// es werden nur Resourcen gesammelt, die spaeter im Lager eingelagert werden, deswegen
		// wird der Stand aus den StorageResources gezogen
		$mStorage		= new Application_Model_StorageResources();
		$dStorage		= $mStorage->find(array('storage_resources.resources_id = ?' => $resourceId));
		$this->setResourceData($dStorage);

		// bisher abgelaufene Zeit auf 0 setzen
		$this->setElapsedTime(0);

		return $this;
	}

	/**
	 * Diese Methode wird aufgerufen wenn die Methode als abgeschlossen gekennzeichnet wird.
	 * Bei dieser Aktion wird eine zufaellige Menge der gesuchten Resource dem Lager hinzugefuegt
	 * @param none
	 * @return object Instanz auf die Klasse System_Plugin_Action_CollectResource
	 */
	public function onComplete() {

		// Resource laden, bei dieser Aktion ist nur eine Resource am Ende moeglich
		$mStorage	= new Application_Model_StorageResources();
		$dStorage = current($this->getResourceData());

		// Die Menge der gefundenen Resourcen wird durch zwei Faktoren bestimmt. Im ersten
		// Schritt wird eine Zufallszahl zwischen 1 - 5 erstellt. Diese Zufallszahl wird mit
		// der Rate (actions_produce_resources.rate) multipliziert
		$raiseValueFactor	= 1;
		if(array_key_exists($dStorage->resource->id, $this->_actionData->produce->resources)) {
			$raiseValueFactor = $this->_actionData->produce->resources[$dStorage->resource->id]->rate;
		}

		$randRaiseValue	= mt_rand(1, 5);
		$randRaiseValue = $randRaiseValue * $raiseValueFactor;
		$randRaiseValue = floor($randRaiseValue);

		$dStorage->resource->curValue	+= $randRaiseValue;

		// @todo: hier sollte noch eine Art Notiz moeglich sein, damit der Nutzer ueber den
		// Ausgang informiert wird

		// erhoehte Menge im Lager speichern
		$mStorage->save($dStorage);

		return $this;
	}
}
?>